#!/usr/bin/env python
# -*- coding: UTF-8 -*-
"""
@Project ：turbo 
@File    ：response.py
@Author  ：赵加响
@Date    ：2023/4/3 13:29 
@Desc    ：
"""
from rest_framework.response import Response

from bases import codes
from bases.resp_format import api_format, fail_format, success_format
from bases.types import dict_list


class APIResponse(Response):
    """
    继承DRF中Response实现通用API Response格式
    使用方式灵活，可以是SuccessResponse也可以是FailResponse
    """

    def __init__(self, code=codes.CODE_20000_OK, success: bool = True, data: dict_list = [], msg: str = '',
                 status=None,
                 headers=None, *args,
                 **kwargs):
        dic = api_format(code=code, success=success, data=data, msg=msg, *args, **kwargs)
        super().__init__(data=dic, status=status, headers=headers)


class SuccessResponse(Response):
    """
    继承DRF中Response实现 Success Response
    响应数据：
        data默认为[]，默认参数，业务需要时可以填入字典或者列表信息供前端使用
        msg默认为''，业务需要时可以填入字符串信息供前端使用
        code默认为20000
        success为True
    """

    def __init__(self, data: dict_list = [], msg: str = '', code=codes.CODE_20000_OK, status=None, headers=None,
                 *args,
                 **kwargs):
        dic = success_format(code=code, data=data, msg=msg, *args, **kwargs)
        super().__init__(data=dic, status=status, headers=headers)


class FailResponse(Response):
    """
    继承DRF中Response实现 Fail Response
    响应数据：
        msg默认为''，默认参数，业务需要时可以填入字符串信息供前端使用
        data默认为[]，业务需要时可以填入字典或者列表信息供前端使用
        code默认为30000
        success为False
    """

    def __init__(self, msg: str = '', data: dict_list = [], code=codes.CODE_30000_VALIDATE_NG, status=None,
                 headers=None, *args,
                 **kwargs):
        dic = fail_format(code=code, data=data, msg=msg, *args, **kwargs)
        super().__init__(data=dic, status=status, headers=headers)
